# 用三个集合表示三门学科的选课学生的姓名(一个学生可以同时选择多门课程)
s_history = {'小明', '张三', '李四', '王五', 'Lily', 'Bob'}
s_politic = {'小明', '小花', '小红', '二狗'}
s_english = {'小明', 'Lily', 'Bob', 'Davil', '李四'}
#求选课学生一共有多少人、
"""
思路分析
1.对三个集合求并集【自动去重】
2.对新的集合len
"""
s_1 = s_history.union(s_politic).union(s_english)
s_1 = s_history | s_politic | s_english
print("选课的学生一共有多少个" , len(s_1))

#求只选择了第一个学科(history)的学生的数量和学生的名字
"""
思路分析
1.只求出在s_history的学员
2.使用差集 即可
"""
s_2 = s_history.difference(s_politic).difference(s_english)
s_2 = s_history - s_politic - s_english
print(s_2)

#求只选了一门学科的学生数量和学生姓名
"""
    思路如下
    1.求只选择了history的学生
    2.求只选择了politic的学生
    3.求只选择了english的学生
    4.然后求并集集合
"""
s_h = s_history - s_politic - s_english
s_p = s_politic - s_history - s_english
s_e = s_english - s_history - s_politic
s_total = s_h | s_p | s_e
print(len(s_total) , s_total)

# - 求选了三门学科的学生数量和学生名字
# s_three = s_h.intersection(s_p).intersection(s_e)
s_three = s_history & s_politic & s_english
print(s_three , len(s_three))

123

